นาย อนุ ม่วงคำ รหัสนักศึกษา 61070327 สาขา วิทยาการข้อมูลและการวิเคราะห์เชิงธุรกิจ
#pip install style
#pip install plotly==4.11.0
ข้อมูลการค้าผ่านแดน-ชายแดน เป็นข้อมูลที่เกี่ยวข้องกับการค้าขายไปยังประเทศที่อยู่ใกล้เคียงกับไทย การค้าผ่านแดน-ชายแดนจะเป็นข้อมูลแสดงการค้าขายจากไทยผ่านช่องทางประเทศเพื่อนบ้านเพื่อไปสู่ประเทศปลายทางใน 7 ประเทศนี้ โดยข้อมูลการค้าผ่านแดน-ชายแดน จะแสดงให้เห็นถึงสถานภาพทางการค้า ความสัมพันธ์ และความต้องการต่าง ๆ ในกลุ่มประเทศที่ใกล้กับไทย ซึ่งเริ่มตั้งแต่ 2017-2019 และรูปแบบการค้าจะแบ่งออกเป็น 2 ลักษณะ
import urllib
import urllib.request
import json
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from collections import defaultdict
import seaborn as sns
import matplotlib.pyplot as plot
from pandas.io.json import json_normalize
import style
import plotly.express as px
from IPython.display import HTML, display
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import warnings
warnings.simplefilter(action='ignore', category=pd.errors.PerformanceWarning)
init_notebook_mode(connected=True)
plt.rcParams['font.family']='Tahoma'
ขั้นตอนที่ 2 จะเป็นการดึงข้อมูลจาก API เข้ามาเก็บไว้ในไฟล์ CSV เพื่อใช้ในการแก้ไขและวิเคราะห์ข้อมูลต่อไป
box_data = []
box_normalize = []
def calldata_api(box_data,box_normalize):
#ขั้นตอนการดึงข้อมูลจาก APi ขั้นตอนแรกจะเริ่มจาก การประกาศตัวแปรต่างๆ
#เช่น เดือน(month) ประเภทการนำสินค้าเข้า(channel) รหัสประเทศค้าขายทางเรือ(code) รหัสประเทศค้าขายทางบก(code_1) ซึงตัวแปรเหล่านี้จะใช้ในการดึง Api
month = ["1","2","3","4","5","6","7","8","9","10","11","12"]
channel = ['import','export']
code_boat = ["CN","SG","VN"]
code_land = ['KH','LA','MM','MY']
year = ["2017","2018","2019"]
#ขั้นตอนที่ 2 จะเป็นการวนลูปเข้าไปในแต่ละตัวแปร เพื่อใช้ในการ fliter ข้อมูลของ api โดยจะแบ่งเป็น 2 loop ใหญ่ ๆ
#loop ที่ 1 จะเป็นการลูปดึงข้อมูลของประเทศที่ค้าขายผ่านทางเรือ
for channel_ in channel:
for year_ in year:
for code_boat_ in code_boat:
for month_ in month:
url = "https://dataapi.moc.go.th/border-transit?trade_type="+channel_+"&country_code="\
+code_boat_+"&year="+year_+"&month="+str(month_)+"&limit=&offset="
response = urllib.request.urlopen(url)
raw_json = response.read().decode("utf-8")
data = json.loads(raw_json) #เมื่อดึงข้อมูลได้เป็นข้อมูลดิบแล้ว จะทำการแปลงชนิดข้อมูลเป็น Json
box_data.append(data) #จากนั้นนำข้อมูล json ที่ได้มาเก็บไว้ใน list ที่ชื่อ box_data
#loop ที่ 2 จะเป็นการลูปดึงข้อมูลของประเทศที่ค้าขายผ่านทางบก
#ซึงการทำงานของ loop ที่ 2 จะเหมือนกับ loop ที่ 1 โดยเปลี่ยนเฉพาะรหัสประเทศ(code_boat to code_land) และเปลี่ยนลิ้ง api
# จาก /border-transit เป็น /border-trades
for channel_ in channel:
for year_ in year:
for code_land_ in code_land:
for month_ in month:
url = "https://dataapi.moc.go.th/border-trades?trade_type="+channel_+"&country_code="\
+code_land_+"&year="+year_+"&month="+str(month_)+"&limit=&offset="
response = urllib.request.urlopen(url)
raw_json = response.read().decode("utf-8")
data = json.loads(raw_json)
box_data.append(data)
#เมื่อเราได้ข้อมูลข้อมูลที่ดึงมาจาก api แล้ว และข้อมูลถูกเก็บไว้ใน list ที่ชื่อ box_data
#ขั้นตอนต่อมาจะเป็นการนำข้อมูลที่ดึงมา มาสร้างเป็น Dataframe
def createdataframe(box_data,box_normalize):
#ในการสร้าง Dataframe จะทำการเข้าถึง index เนื่องจากใน box_data จะเป็นข้อมูลทีประกอบด้วย list list object
#จึงทำการท่องเข้าใน box_data.ให้เหลือเพียง object ของแต่ละอัน จึงใช้ loop วนเพื่อเข้าถึง index
for i in range(len(box_data)):
box_normalize+=box_data[i]
data = json_normalize(box_normalize)
return data
#หลังจากเราได้สร้าง DataFrame แล้ว ขั้นตอนต่อมาจะเป็นการบันทึก dataframe to csv
def dataframe_to_csv(data):
#โดยในการบันทึก Data frame เป็น csv จะใช้คำสั่ง to_csv
data.to_csv('Data\data.csv', encoding='utf-8-sig', index=False)
ขั้นตอนที่ 3 จะทำการการแปลงข้อมูลจาก api ให้เป็น DataFrame จากนั้นบันทึกลง CSV โดยผ่านการทำงานทั้งหมดดังนี้
calldata_api(box_data,box_normalize) #ดึง api
createdataframe(box_data,box_normalize).head() #สร้าง dataframe
dataframe_to_csv(createdataframe(box_data,box_normalize)) # บันทึกลง csv
ขั้นตอนที่ 4 จะเป็นการโหลดข้อมูลที่เซฟไว้ของเป็น CSV ขึ้นมาใช้งาน โดยขั้นตอนนี้จะรวมไปถึงการทำ Cleaning ข้อมูลและสำรวจข้อมูลภายใน
data_trade = pd.read_csv("Data\data.csv",index_col= ['country_code','year','month'])
data_trade.head()
data_trade.dtypes # การแสดงชนิดข้อมูลของแต่ละ column
data_trade.shape #เป็นการแสดงมิติของข้อมูล ซึ่งข้อมูลมีทั้งหมด 201060 row และมี 7 column
data_trade.describe() #สถิติอธิบาย
ขั้นตอนนี้จะเป็นการจะการกับค่า null ของข้อมูล
data_trade.isnull().sum()
จากผลลัพธ์ด้านบน พบว่าข้อมูลไม่มีค่า null จึงเริ่มทำการวิเคราห์ต่อในขั้นตอนต่อไหป
จะเป็นขั้นตอนการเช็คคำ เนื่องจากข้อมูลที่ได้รับมามีชื่อสินค้าบางรายการ ตัวสระตกขาดหายไป จึงทำการแก้ไขดังขั้นตอนต่อไปนี้
data_trade[data_trade.product_name.str.contains('ครื่องจักรกล')].product_name.value_counts() #เช็คคำ
จากการตรวจสอบคำพบว่า มีการสระหาย และเนื่องจาก 2 ประโยคนี้มีความหมายเหมือนกัน จะทำการตั้งชื่อรวมเข้าด้วยกัน
#ทำการแก้ไขคำด้วยการกำหนดเงื่อนไขใน .loc และ ค่าใหม่ลงไป
data_trade.loc[data_trade['product_name'] == 'ครื่องจักรกลและส่วนประกอบ อื่น ๆ' , 'product_name'] = 'เครื่องจักรกลอื่น ๆ และส่วนประกอบ'
data_trade[data_trade.product_name.str.contains('ครื่องจักรกล')].product_name.value_counts() #ตรวจสอบผลลัพธ์
data_trade[data_trade.product_name.str.contains('ครื่องแต่งกายและเข็มขัด')].product_name.value_counts()#เช็คคำ
data_trade.loc[data_trade['product_name'] == 'ครื่องแต่งกายและเข็มขัด' , 'product_name'] = 'เครื่องแต่งกายและเข็มขัด' #แก้ไขคำ
data_trade[data_trade.product_name.str.contains('ครื่องแต่งกายและเข็มขัด')].product_name.value_counts() #แสดงผลลัพธ์
เป็นกาวิเคราะห์ภาพรวมการไหลของกระแสเงินของประเทศไทย เพื่อแสดงภาพรวมเงินเข้าออกประเทศของไทยในการค้าขายผ่านแดน-ชายแดน ซึ่งจากราฟด้านล่างแสดงให้เห็นว่าใน 2019 นั้นมีเงินหมุนเวียนเข้าประเทศเยอะที่สุดจากการค้าข้ามแดน-ชายแดน โดยจำนวนเงินส่วนใหญ่มาจากสินค้านำเข้าของประเทศ
#เป็นกร่าฟแสดงเงินเข้าออกจากประเทศไทย จากการค้าขายกับเพื่อนบ้านโดยจะแสดงยอดขายทั้งปีและประเภทของการขาย
#ซึ่งขั้นตอนมีดังนี้
data_circulat = (data_trade.groupby(by=['year','type']).sum()/1000000) #ขั้นตอนแรกจะเริ่มจากรวมกลุ่มข้อมูลโดยจะกรุ๊ปตามปี
#และประเภทการขายหลังจากนั้นทำการหารด้วยหนึ่งล้าน เพื่อแปลงหน่วยเป็นล้าน
data_circulat
#ขั้นตอนต่อมา นำ dataframe ที่สร้างไว้มาสร้างเป็น dict เนื่องจากต้องการแสดงในรูปแบบ bar stack
data_plot = {"Export":[data_circulat.loc[2017,'export'][0],data_circulat.loc[2018,'export'][0],
data_circulat.loc[2019,'export'][0]],#ซึ่ง dict ที่มี keyเป็น export จะมีค่าเป็นlist ที่เก็บยอดขายส่งออกของแต่ละปี
"Import":[data_circulat.loc[2017,'import'][0],data_circulat.loc[2018,'import'][0],
data_circulat.loc[2019,'import'][0]]}#และ key เป็น import จะมีค่าเป็น list ที่เก็บยอดขายนำเข้าของแต่ละปี
dataframe = pd.DataFrame(data=data_plot ,index = [2017,2018,2019]) #จากนั้น นำdict ที่สร้างไว้มาสร้างเป็น dataframe
dataframe
#และขั้นตอนสุดท้ายจะเป็นการนำ dataframe ที่สร้างไว้มา plot แสดงผลดังรูปด้านล่าง
index = ["2017","2018","2019"]
dataframe.plot.barh(stacked=True ,title = 'Cash flow overview',figsize=(15, 5) )
plt.xlabel('millionbaht')
plt.ylabel('year')
plt.show()
การแสดงผลด้านล่างจะเป็นการแสดงสัดส่วนการค้าข้ามแดนโดยผ่านเรือของแต่ละปี โดยจะแสดงอยู่ในรูปแบบของเปอร์เซ็น
จะประกอบไปด้วยประเทศดังนี้
#pie chart แสดงสัดส่วนการค้าข้ามแดนทางเรือ โดยขั้นตอนแรกจะเริ่มจากการ filterข้อมูลประเทศที่มีการค้าผ่านทางเรือ หลังจากนั้นทำการกรุ๊ปตามประเทศและปี
data_boat = data_trade.loc[['CN','SG','VN']].groupby(by=['country_code','year'])
data_boat = data_boat.sum()/1000000 #ต่อมาทำการแปลงหน่วยของข้อมูลให้เป็นหนึ่งล้าน โดยการนำหนึ่งล้านไปหารข้อมูล
data_boat
#ขั้นตอนต่อจะเป็นการสร้าง set ข้อมูลเพื่อใช้ในการสร้าง pie chart ของแต่ละปี
label = ['CHINA','SINGAPORE','VIETNAM']
sum_pie1 = [data_boat.loc['CN',2017][0],data_boat.loc['SG',2017][0],data_boat.loc['VN',2017][0]]#เป็นข้อมูลยอดขายปี2017ของ 3 ประเทศ
sum_pie2 = [data_boat.loc['CN',2018][0],data_boat.loc['SG',2018][0],data_boat.loc['VN',2018][0]]#เป็นข้อมูลยอดขายปี2018ของ 3 ประเทศ
sum_pie3 = [data_boat.loc['CN',2019][0],data_boat.loc['SG',2019][0],data_boat.loc['VN',2019][0]]#เป็นข้อมูลยอดขายปี2019ของ 3 ประเทศ
explode = (0.09, 0, 0 ) #ค่าทีใช้แบ่งแยกความห่างจากประเทศที่มีเปอรเซ็นเยอะสุดในแต่ละ pie chart
fig = plt.figure()
ax1 = fig.add_axes([0, 0, 1, 0.85], aspect=1) #และขั้นตอนนี้จะเป็นการกำหนด layout ของ pie chart
ax2 = fig.add_axes([0.7, 0, 1, 0.85], aspect=1)
ax3 = fig.add_axes([1.4, 0, 1, 0.85], aspect=1)
ax1.pie(sum_pie1,explode=explode,colors= ['orange','brown','green'], labels=label, autopct='%1.1f%%',
shadow=True, startangle= 90) #การพรอท pie chart ปี 2017
ax2.pie(sum_pie2,explode=explode,colors= ['orange','brown','green'], labels=label, autopct='%1.1f%%',
shadow=True, startangle= 90) #การพรอท pie chart ปี 2018
ax3.pie(sum_pie3,explode=explode,colors= ['orange','brown','green'], labels=label, autopct='%1.1f%%',
shadow=True, startangle= 90) #การพรอท pie chart ปี 2019
ax1.set_title('2 0 1 7')
ax2.set_title('2 0 1 8')
ax3.set_title('2 0 1 9')
plt.show()
จาก Pie Chart ด้านบน แสดงให้เห็นว่าประเทศที่ค้าขายผ่านทางเรือมากที่สุดคือประเทศจีน และในแต่ละปียอดค้าขายยังเพิ่มไม่ต่ำกว่า 10% นั่นแสดงให้ถึงการขยายตัวของประเทศจีนในด้านเศรษฐกิจ
การแสดงผลด้านล่างจะเป็นการแสดงสัดส่วนการค้าข้ามแดน โดยผ่านทางบกของแต่ละปีและจะแสดงอยู่ในรูปแบบของเปอร์เซ็น จะประกอบไปด้วยประเทศดังนี้
#เป็นการ plot กราฟเพื่อแสดงการค้าข้ามแดนผ่านทางบก โดยขั้นตอนแรกจะเริ่มจากการ filter เอาเฉพาะประเทศที่ค้าขายผ่านทางบก ซึ่งมี 4 ประเทศ
data_land = data_trade.loc[['KH','LA','MM','MY']].groupby(by=['country_code','year']).sum()
data_land = data_land/1000000 #จากนั้นทำการแปลงหน่วยให้เป็นหนึ่งล้าน
data_land
#ขั้นตอนนี้จะเตรียมข้อมูลก่อนการ plot
dic_land = dict() #โดยจะเริ่มจากการสร้าง dict ขึ้นมา
for i in range(len(data_land)):#และจะใช้ loop วนตามขนาดของ dataframe ก่อนหน้า ในการกำหนด key และvalueใน dict
#ซึ่งจะกำหนด key โดยใช้ index ที่ i ซึ่งผลที่ได้ของ index ที่ i จะเป็นชื่อย่อประเทศของแต่ row
#หลังจากได้ key เป็นชื่อประเทศแล้ว เราจะทำการกำหนดvalueของ key นั้น โดยใช้ .loc ในการ filter หาข้อมูลจาก index ที่ i หลังจากนั้นก็เข้าถึงข้อมูลของ
#column value_baht และดึงออกมา 3 ค่า ซึ่งผลที่ได้จะเป็น list ของข้อมูลปี2017-2019
#ตัวอย่าง {'KH': array([1105.664718, 878.355032, 1517.631198])}
dic_land[data_land.index[i][0]] = data_land.loc[data_land.index[i][0]].value_baht[0:3].values
dataframe_land = pd.DataFrame(data=dic_land, index=index) #่ต่อมานำข้อมูล dictที่เตรียมไว้มาสร้างเป็น dataframe
dataframe_land
#ขั้นตอนต่อมาจะเป็นการ plot การค้าขายทางบกในแต่ละปี
dataframe_land.plot( title = 'Cross-border trade via land',figsize=(15, 6) ,kind='barh')
plt.xlabel('Millionbaht')
plt.ylabel('Y e a r')
จากกราฟด้านบน แสดงให้ว่าประเทศเมียนมาเป็นประเทศที่มีการค้าขายเป็นอันดับ 1 เนื่องจากสินค้าที่ส่งออกนั่นเป็น ก๊าซธรรมชาติ ทำให้มีราคาสูงและเป็นสินค้าที่มีความต้องการสูง
เนื่องจากยอดเงินไหลเข้าออกจากประเทศเมียนมามีจำนวนที่สูงมาก จึงทำให้ไม่สามารถเข้าใจประเทศที่เหลือได้อย่างถูกต้อง จึงนำประเทศเมียนมาออกเพื่อดูเงินหมุนเวียนของประเทศที่เหลือ
#ซึ่งขั้นตอนนี้จะทำเหมือนกับการ plot ก่อนหน้านี้ เพียงแต่ตัดประเทศเมียนมาออก เพราะมีจำนวนยอดเงินไหลเข้าออกที่สูงมากเกินไป
data_land = (data_trade.loc[['KH','LA','MY']].groupby(by=['country_code','year']).sum()/1000000)
dic_land = dict()
for i in range(len(data_land)):
dic_land[data_land.index[i][0]] = data_land.loc[data_land.index[i][0]].value_baht[0:3].values
dic_land
dataframe_land = pd.DataFrame(data=dic_land, index=index)
dataframe_land.plot( title = 'Cross-border trade via land',figsize=(15, 6) ,kind='barh',color =['#1f77b4','orange','crimson'])
plt.xlabel('Millionbaht')
plt.ylabel('Y e a r')
จากกราฟแท่งด้านบน แสดงให้ถึงประเทศที่มีการค้าผ่านทางบกเป็นอันดับ 2 คือ ประเทศลาว และประเทศที่มียอดขายเพิ่มมากสุดเมื่อเทียบกับปีก่อน ๆ คือประเทศกัมพูชา นั่นแสดงให้เห็นถึงการขยายตัวด้านเศรฐกิจทางการค้า
จากกราฟด้านล่าง จะเป็นการแสดงข้อมูลนำเข้าและส่งออกของสินค้าผ่านทางเรือ โดยจะเปรียบเทียบแต่ละปีของแต่ละประเทศที่ทำการค้ากับประเทศไทย
#การ plot ข้อมูลนำเข้าและส่งออกทางเรือ ซึ่งจะแบ่งข้อมูลออกเป็น 2 ส่วน คือข้อมูลนำเข้า และส่งออก โดยขั้นตอนแรกจะเริ่มที่ข้อมูลนำเข้า
boat_ = ['CHINA', 'SINGAPORE', 'VIETNAM']
country_boat = ['CN','SG','VN']
#โดยจะเริ่ม filter ประเภทของการขนส่ง และ หลังจากนั้น filter ประเทศที่ทำการค้าขายผ่านทางเรือ ซึ่งมี 3ประเทศจากนั้นทำการค้า่ขาย
#ต่อมาทำการกรุ๊ปตามรหัสประเทศ ปี และ เดือน เพื่อง่ายต่อการเข้าถึง
data_im_boat = data_trade.loc[(data_trade.type == 'import') & (data_trade.country_name_en.isin(boat_))]\
.groupby(by=['country_code','year','month']).sum()/1000000 #ซึ่งต่อมาจะทำการแปลงหน่วยให้เป็นหนึ่งล้านบาท
#และในส่วนข้อมูลส่งออกจะทำเหมือนข้อมูลนำเข้า แต่เปลี่ยนเงื่อนไขจาก import to export
data_ex_boat = data_trade.loc[(data_trade.type == 'export') & (data_trade.country_name_en\
.isin(boat_))].groupby(by=['country_code','year','month']).sum()/1000000
data_im_boat.head(12)
#ขั้นตอนต่อมา เป็นการนำข้อมูลที่เตรียมไว้มาใช้ในการ plot()
fig,a = plt.subplots(nrows=3,ncols= 2,figsize=(16,20))
for i in range(3):#โดยจะทำการ loop 3 รอบ เพื่อใช้ในการพรอททั้ง 3 ประเทศ [Chaina,Singapore,Vietnam]
#โดยการ loop แต่ละครั้ง จะได้กราฟเปรียบเทียบ 3 ปี ของประเทศนั้นๆ
a[i][0].plot(data_im_boat.loc[country_boat[i],2017],'-ro')#country_boat[i] จะเป็นประเทศตาม index ที่ i
a[i][0].plot(data_im_boat.loc[country_boat[i],2018],'-o')
a[i][0].plot(data_im_boat.loc[country_boat[i],2019],'-go')
a[i][0].set_title('IMPORT'+' OF '+boat_[i])
a[2][0].set_xlabel("Month")
a[i][0].set_ylabel("Millionbaht")
a[i][0].legend(['2017','2018','2019'])
#เมื่อเราได้กราฟของแต่ละประเทศที่มีการนำเข้าสินค้าแล้ว
#ต่อมา loop ด้านล่างจะเป็นการ loop เพื่อพรอทข้อมูลส่งออก ซึ่งวิธีการสร้างจะเหมือนกับข้อมูลนำ เปลี่ยนแค่ dataset จาก data_im_boat to data_ex_boat
for i in range(3):
a[i][1].plot(data_ex_boat.loc[country_boat[i],2017],'-ro')
a[i][1].plot(data_ex_boat.loc[country_boat[i],2018],'-o')
a[i][1].plot(data_ex_boat.loc[country_boat[i],2019],'-go')
a[i][1].set_title('EXPORT'+' OF '+boat_[i])
a[2][1].set_xlabel("Month")
a[i][1].set_ylabel("Millionbaht")
a[i][1].legend(['2017','2018','2019'])
plt.suptitle('IMPORT AND EXPORT BY BOAT')
plt.show()
จากกราฟด้านบน ทำให้เห็นช่วงเวลาในการนำเข้าและส่งออกของประเทศที่ค้าขายผ่านทางเรือ
#ส่วนข้อมูลนำเข้าและส่งออกผ่านทางบก จะมีขั้นตอนการทำเหมือนกับ ผ่านทางเรือ ซึ่งเปลี่ยนเฉ่พ่าะชื่อประเทศ
land_ = ['CAMBODIA', 'LAO REPUBLIC','MYANMAR', 'MALAYSIA']
country_land = ['KH','LA','MM','MY']
data_im_land = data_trade.loc[(data_trade.type == 'import') & (data_trade.country_name_en\
.isin(land_))].groupby(by=['country_code','year','month']).sum()/1000000
fig,a = plt.subplots(nrows=4,ncols= 2,figsize=(16,20))
for i in range(4):
a[i][0].plot(data_im_land.loc[country_land[i],2017],'-ro')
a[i][0].plot(data_im_land.loc[country_land[i],2018],'-o')
a[i][0].plot(data_im_land.loc[country_land[i],2019],'-go')
a[i][0].set_title('IMPORT'+' OF '+land_[i])
a[3][0].set_xlabel("Month")
a[i][0].set_ylabel("Millionbaht")
a[i][0].legend(['2017','2018','2019'])
data_ex_land = data_trade.loc[(data_trade.type == 'export') & (data_trade.country_name_en\
.isin(land_))].groupby(by=['country_code','year','month']).sum()/1000000
for i in range(4):
a[i][1].plot(data_ex_land.loc[country_land[i],2017],'-ro')
a[i][1].plot(data_ex_land.loc[country_land[i],2018],'-o')
a[i][1].plot(data_ex_land.loc[country_land[i],2019],'-go')
a[i][1].set_title('EXPORT'+' OF '+land_[i])
a[3][1].set_xlabel("Month")
a[i][1].set_ylabel("Millionbaht")
a[i][1].legend(['2017','2018','2019'])
plt.suptitle('IMPORT AND EXPORT BY LAND')
จากกราฟด้านบน ทำให้เห็นช่วงเวลาในการนำเข้าและส่งออกของประเทศที่ค้าขายผ่านทางบก
#จะเป็นการ plot ความถี่ในการขนส่งต่อเดือนและเป็นข้อมูลรวมปี2017-2019 โดยขั้นตอนแรก
#จะเป็นการสร้างตารางขึ้นมา โดยใช้ pivot_table คือการสร้างตารางโดยการระบุ index values และ column ของตาราง
data_frequent = pd.pivot_table(data_trade,values='value_baht',index=['province_name'],\
columns =['month'],aggfunc=len ,fill_value=0)# ซึ่งในการสร้างตารางเราได้กำหนด index คือ ชื่อจังหวัด
#กำหนดคอลัมน์เป็นเดือน ซึ่งมีทั้งหมด 12 เดือน และกำหนดค่าในคอลัมน์เป็น value_baht โดยจะระบุเป็นความถี่ ซึ่งใช้คำสั่ง agg = len
#ส่วนจังไหนเป็นค่า nan ให้แทนด้วย 0
data_frequent
#ขั้นตอนต่อมา นำตาราง pivot ที่เตรียมไว้มา plot ในรูปแบบ heatmap
f, ax = plt.subplots(figsize=(15, 10))
sns.heatmap(data_frequent, annot=True, fmt="d", linewidths=.5, ax=ax,cmap="YlGnBu")
plt.title('Number of trades per month')
จาก Heat Map ด้านบนทำให้ทราบถึงจำนวนครั้งในการค้าขายแต่ละเดือนและแต่ละจังหวัด โดยจะบ่งบอกถึงช่องทางหลักในการนำเข้าและส่งออกของประเทศไทยที่ประเทศเพื่อนบ้านนิยมใช้ในการค้าขาย ซึ่งสามารถแบ่งเป็น 5 ช่องทางหลักๆ ด้วยกันได้แก่
ภาพด้านล่างนี้จะเป็นการแสดงความสัมพันธ์ระหว่างประเทศผู้ค้าขายกับจังหวัดหรือ ช่องทางในการขนส่ง โดยจะบ่งบอกถึงจังหวัดที่แต่ละประเทศเลือกใช้ในการขนส่ง
#เป็นการพรอทแสดงความสัมพันธ์ของการขนส่ง โดยใช้ plotly scatter ในการ visualization
fig = px.scatter(data_trade, y='province_name', x="country_name_en",color = 'country_name_en')# โดยกำหนด y คือ ชื่อจังหวัด
# x คือ ชื่อประเทศ
fig.show()
จากภาพ Scatter plot ด้านบนจะทำให้ทราบถึงช่องทางที่แต่ละประเทศเลือกใช้ในการขนส่งโดยผ่านจังหวัดต่าง ๆ ดังภาพ
จะเป็นการแสดงด่านที่เป็นหัวใจหลักของ 5 จังหวัด ที่มีการค้าขายชุกชุมในประเทศไทยได้แก่
#เป็นการสร้าง pie chart dashboard โดยมีขั้นตอนดังนี้
province = ['สงขลา','มุกดาหาร','เชียงราย','สระแก้ว','ตาก']
df = data_trade[data_trade.province_name.isin(province)] #ขั้นตอนแรกกำหนด dataset ให้มีเฉพาะ 5 จังหวัด
fig = px.sunburst(df, path=['province_name', 'port_name'])#จากนั้นทำการ plot โดยเลือกจังหวัดเป็น main และ ด่านตามลำดับ
fig.show()
จาก Pie Chart Dashboard ด้านบน จะทำให้เราทราบด่านหลักๆ ของแต่ละจังหวัดที่เป็นหัวใจหลักของการขนในการทำการค้ากับไทย และแต่ละด่านยังแสดงความถี่ที่มีการขนส่งผ่านด่านนั้น ๆ
การวิเคราะห์สินค้าที่ขนส่งผ่าน 5 จังหมด
#เป็นการแสดงสินค้าทั้งหมดที่ขนส่งผ่าน 5 จังหวัด
data_trade.product_name.value_counts()
จากการแสดงจำนวนสินค้าทั้งหมดที่ขนส่งผ่าน 5 จังหวัด พบว่ายังมีประเภทหรือชื่อสินที่สามารถรวมกันได้ โดยจะทำการแก้ไขดังขั้นตอนด้านล่างนี้
#สร้างชุดข้อมูลขึ้นมาใหม่ โดยกำหนดให้มีเฉพาะ 5 จังหวัด
data_trade_th = data_trade[data_trade.province_name.isin(province)]
data_trade_th.head(3)
#ทำการรวมสินค้าที่เป็นกระดาษ โดยเริ่มจากสร้าง list รายชื่อสินค้ากระดาษทั้งหมด
paper = data_trade_th[data_trade_th.product_name.str.contains('กระดาษ')].product_name.unique()
paper
#จากนั้นทำการเปลี่ยนค่าข้อมูลของคอลัมน์ product_name ที่มีค่าอยู่ใน list ให้ค่าเป็น กระดาษ
data_trade_th.loc[data_trade_th['product_name'].isin(paper) , 'product_name'] = 'กระดาษ'
data_trade_th.product_name.value_counts().head(3)#แสดงผลลัพธ์
kitchen = data_trade_th[data_trade_th.product_name.str.contains('เครื่องใช้')].product_name.unique()
kitchen #list รายชื่อสินค้า
data_trade_th.loc[data_trade_th['product_name'].isin(kitchen) , 'product_name'] = 'เครื่องใช้และเครื่องตกแต่งภายในบ้านเรือนอื่น ๆ'#เปลี่ยนค่า
data_trade_th[data_trade_th.product_name == 'เครื่องใช้และเครื่องตกแต่งภายในบ้านเรือนอื่น ๆ'].head(2)#แสดงผลลัพธ์
machine = data_trade_th[data_trade_th.product_name.str.contains('เครื่องจักร')].product_name.unique()
machine # list รายชื่อสินค้า
data_trade_th.loc[data_trade_th['product_name'].isin(machine) , 'product_name'] = 'เครื่องจักรกลอื่น ๆ และส่วนประกอบ'#เปลียนค่า
data_trade_th.product_name.value_counts().head(5)#แสดงผลลัพธ์
bag = data_trade_th[data_trade_th.product_name.str.contains('กระเป๋า')].product_name.unique()
bag # list รายชื่อสินค้า
data_trade_th.loc[data_trade_th['product_name'].isin(bag) , 'product_name'] = 'กระเป๋าถือและกระเป๋าอื่น ๆ'#เปลียนค่า
data_trade_th.product_name.value_counts().head(4)#แสดงผลลัพธ์
bettlet = data_trade_th[data_trade_th.product_name.str.contains('ของ')].product_name.unique()
bettlet #list รายชื่อ
data_trade_th.loc[data_trade_th['product_name'].isin(bettlet) , 'product_name'] = 'สินค้าเบ็ตเตล็ดและอื่น' #เปลี่ยนค่า
data_trade_th.product_name.value_counts().head(7)#แสดงผลลัพธ์
chemical = data_trade_th[data_trade_th.product_name.str.contains('เคมี')].product_name.unique()
chemical #list รายชื่อ
data_trade_th.loc[data_trade_th['product_name'].isin(chemical) , 'product_name'] = 'เคมีภัณฑ์อื่น ๆ'#เปลี่ยนค่า
data_trade_th.product_name.value_counts().head(9)#แสดงผลลัพธ์
corn = data_trade_th[data_trade_th.product_name.str.contains('ข้าวโพด')].product_name.unique()
corn #list รายชื่อ
data_trade_th.loc[data_trade_th['product_name'].isin(corn) , 'product_name'] = 'ข้าวโพด'#เปลี่ยนค่า
camera = data_trade_th[data_trade_th.product_name.str.contains('กล้อง')].product_name.unique()
camera #list รายชื่อ
data_trade_th.loc[data_trade_th['product_name'].isin(camera) , 'product_name'] = 'กล้องถ่ายรูปและส่วนประกอบ' #เปลี่ยนค่า
prawn = data_trade_th[data_trade_th.product_name.str.contains('กุ้ง')].product_name.unique()
prawn #list รายชื่อ
data_trade_th.loc[data_trade_th['product_name'].isin(prawn) , 'product_name'] = 'กุ้งสด แช่เย็น แช่แข็ง' #เปลี่ยนค่า
drink = data_trade_th[data_trade_th.product_name.str.contains('เครื่องดื่ม')].product_name.unique()
drink #list ชื่อ
data_trade_th.loc[data_trade_th['product_name'].isin(drink) , 'product_name'] = 'เครื่องดื่ม' #เปลี่ยนค่า
computer = data_trade_th[data_trade_th.product_name.str.contains('คอม')].product_name.unique()
computer #list รายชื่อ
data_trade_th.loc[data_trade_th['product_name'].isin(computer) , 'product_name'] = 'เครื่องคอมพิวเตอร์และอุปกรณ์' #เปลี่ยนค่า
oil = data_trade_th[data_trade_th.product_name.str.contains('ไขมัน')].product_name.unique()
oil #list รายชื่อ
data_trade_th.loc[data_trade_th['product_name'].isin(oil) , 'product_name'] = 'น้ำมันสัตว์' #เปลี่ยนค่า
tile = data_trade_th[data_trade_th.product_name.str.contains('กระเบื้อง')].product_name.unique()
tile #list รายชื่อ
data_trade_th.loc[data_trade_th['product_name'].isin(oil) , 'product_name'] = 'กระเบื้องปูพื้นและปิดผนัง' #เปลี่ยนค่า
#ทำการนับความถี่ในการค้าขายของแต่ละสินค้า จากนั้นทำการตัดสินค้าที่มีความถี่น้อยกว่า 20
rate_more_ = data_trade_th.product_name.value_counts().head(-10).index.tolist()
rate_more_
#ขั้นตอนต่อมาคือการสร้าง dataframe ที่ตัดสินค้าที่มีความถี่น้อยกว่า 20 ออก
rate_more_ = data_trade_th.loc[data_trade_th['product_name'].isin(rate_more_)]
rate_more_.head()
#จากนั้นทำการพรอท scatter plot
fig = px.scatter(rate_more_,y="product_name", x="province_name", color="country_name_en",width =950 ,height = 900)
fig.update_traces(marker=dict(size=12,\
line=dict(width=2,\
color='DarkSlateGrey')),\
selector=dict(mode='markers'))
fig.show()
จาก scatter plot ด้านบน ทำให้ทราบถึงรายระเอียดข้อมูลดังนี้
#โดยขั้นตอนแรกจะเริ่มจากการ กรุ๊ปตามชื่อสินค้า จากนั้นทำการแปลงหน่วยให้เป็นล้านบาท
product_ = data_trade_th.groupby(by='product_name').sum()/10000000
product_
#ทำการ plot มูลค้าสินค้า
product_.plot(kind='barh',figsize=(13,18))
plt.ylabel('ชื่อสินค้า')
plt.xlabel('ล้านบาท')
จากการกราฟ จะแสดงให้เห็นถึงมูลค่าของสินค้าแต่ละชนิดของ 5 จังหวัด โดยสินค้าที่มีมูลสูงสุดคือ เครื่องคอมพิวเตอร์และอุปกรณ์
ใน 3 ปีที่ผ่านมาตั้งแต่ปี 2017-2019 พบว่าปี 2019 นั้นกระแสเงินหมุนเวียนเข้าออกประเทศไทยมากทีสุด โดยจำนวนเงินส่วนใหญ่ที่หมุนเวียนมาจากสินค้านำเข้า จากนั้นได้ทำการสรวจลงไปในระดับประเทศจึงได้ทราบว่า 2 ประเทศเพื่อนที่มีอิทธิพลในการค้าของประเทศไทย ซึ่งได้แก่
ในการค้าขายกับประเทศเพื่อนบ้านประเทศไทยจะมีช่องทางที่ใช้ในการขนส่งหลักๆ 5 ช่องทาง โดยใน 5 ช่องทางที่กล่าวถึงนี้ล้วนแล้วเป็นช่องทางที่ประเทศเพื่อนบ้านนิยมใช้เป็นช่องทางหลักในการขนส่ง เนื่องจากทุกช่องทางที่กล่าวถึงมีการขนส่งผ่านช่องทางนั้นๆ ไม่ต่ำกว่า 100 ครั้งต่อเดือน และมากสุดคือ 500 ครั้งต่อเดือน ซึ่ง 5 ช่องทางหลัก ๆ ได้แก่
ในการวิเคราะห์สำหรับอนาคตข้อมูลควรมี latitude longitude หรือ จำนวนของสินค้านั้นๆ เพื่อทำให้มุมมองการแสดงผลได้มากขึ้น